home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 2
/
CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso
/
magazine
/
amiga_e
/
capus2
/
eshell
/
sources
/
eshell.e
next >
Wrap
Text File
|
1995-03-31
|
10KB
|
351 lines
/*======<<< Peps Header >>>======
PRGVERSION '0'
================================
PRGREVISION '1'
================================
AUTHOR 'NasGûl (ß version)'
===============================*/
/*======<<< History >>>======
- 0.1 commands:
cd/pslist/reset/pcdir/d/changedsp
mdir/delay/setcom/del/ass en cours/fullsize
syslist.
===============================*/
OPT OSVERSION=37
CONST DEBUG=FALSE
/*"MODULES LIST"*/
MODULE 'dos/dos'
MODULE 'dos/rdargs'
MODULE 'dos/dosextens'
MODULE 'dos/dosasl','utility','dos/dostags'
MODULE 'eropenlib'
MODULE 'intuition/intuition'
MODULE 'intuition/screens'
MODULE 'intuition/intuitionbase'
MODULE 'exec/nodes','exec/lists','exec/ports','exec/memory','exec/execbase','exec/tasks','exec/libraries'
MODULE 'mheader'
/*=== Commande ListCom ===*/
MODULE 'commodities'
/**/
/*"PMODULES LIST"*/
PMODULE 'EshellList'
PMODULE 'EShellCom1'
PMODULE 'lc'
PMODULE 'PModules:dWriteF'
PMODULE 'PModules:PMHeader'
/**/
/*"CONST/ENUM/OBJECTS/RAISE"*/
CONST MAXPATH=250
ENUM ER_NONE,ER_MEM
OBJECT filenode
node:ln /* ln.name=filename */
direntrytype:LONG /* like fileinfoblock */
curdirname:LONG
protection:LONG
size:LONG
numblocks:LONG
comment:LONG
ENDOBJECT
RAISE ER_MEM IF New()=NIL, /* set common exceptions: */
ER_MEM IF String()=NIL /* every call to these functions will be */
/*
ERROR_BREAK IF CtrlC()=TRUE /* automatically checked against NIL, */
/* and the exception ER_MEM is raised */
*/
/* Commande SysList */
SET LIST_TASK,LIST_LIBRARY,LIST_DEVICE,LIST_PORT,LIST_WINDOW,
LIST_MEMORY
/**/
/*"APPLICATION DEF"*/
DEF prompt[256]:STRING
DEF cdn[256]:STRING
DEF bdn[256]:STRING
DEF pro:PTR TO process
DEF cl:PTR TO commandlineinterface
DEF con
DEF filelist:PTR TO lh,freenode
/**/
/*"COMMANDS LIST"*/
/*"ASS COMMAND"*/
/*"ass(s)"*/
PROC ass(s)
DEF m:PTR TO LONG
DEF argstr[256]:STRING
DEF l,ll
DEF logicname[256]:STRING
DEF physicname[256]:STRING
DEF r
DEF dl:PTR TO doslist,mask
/* DosList */
m:=[0,0,0,0,0,0,0,0]
MidStr(argstr,s,3,ALL)
IF getArg(argstr,'Nom,Dossier,Add/S,Late/S,Remove/S,V=VolList/S,D=DevicesList/S,A=AssignList/S',m)
IF m[0] THEN StrCopy(logicname,m[0],ALL)
IF m[1] THEN StrCopy(physicname,m[1],ALL)
IF Not(m[4])
r:=InStr(logicname,':',0)
IF r<>-1
MidStr(argstr,logicname,0,EstrLen(logicname)-1)
StrCopy(logicname,argstr,ALL)
ENDIF
ENDIF
IF m[2]
IF m[0] AND m[1]
IF l:=Lock(physicname,-2)
ll:=DupLock(l)
IF l THEN UnLock(l)
r:=AssignAdd(logicname,ll)
ENDIF
ENDIF
JUMP assend
ENDIF
IF m[3]
IF m[0] AND m[1]
r:=AssignLate(logicname,physicname)
ENDIF
JUMP assend
ENDIF
IF m[4]
IF m[0]
IF l:=Lock(logicname,-2)
ll:=DupLock(l)
IF l THEN UnLock(l)
r:=AssignLock(logicname,NIL)
ENDIF
ENDIF
JUMP assend
ENDIF
IF m[0] AND m[1]
IF l:=Lock(physicname,-2)
ll:=DupLock(l)
UnLock(l)
r:=AssignLock(logicname,ll)
WriteF('\d\n',r)
JUMP assend
ENDIF
ENDIF
IF m[5]
mask:=LDF_VOLUMES+LDF_READ
dl:=LockDosList(mask)
WHILE (dl:=NextDosEntry(dl,mask))
WriteF('\s:\n',TrimStr(Shl(dl.name,2)))
ENDWHILE
UnLockDosList(mask)
ENDIF
IF m[6]
mask:=LDF_DEVICES+LDF_READ
dl:=LockDosList(mask)
WHILE (dl:=NextDosEntry(dl,mask))
WriteF('\s:\n',TrimStr(Shl(dl.name,2)))
ENDWHILE
UnLockDosList(mask)
ENDIF
IF m[7]
mask:=LDF_ASSIGNS+LDF_READ
dl:=LockDosList(mask)
WHILE (dl:=NextDosEntry(dl,mask))
WriteF('\s:\n',TrimStr(Shl(dl.name,2)))
ENDWHILE
UnLockDosList(mask)
ENDIF
ELSE
WriteF('Bad Args!!.\n')
ENDIF
assend:
m[0]:=0;m[1]:=0;m[2]:=0;m[3]:=0;m[4]:=0;m[5]:=0;m[6]:=0;m[7]:=0
ENDPROC
/**/
/**/
/*"LISTCOM COMMAND"*/
/*"listcom()"*/
PROC listcom()
DEF l:PTR TO lh,r
DEF n:PTR TO ln
IF cxbase:=OpenLibrary('commodities.library',0)
r:=p_InitList()
CopyBrokerList(r)
l:=r
n:=l.head
WHILE n
IF n.succ<>0
WriteF('Nom:\l\s[20] Pri:\d\n',n.name,n.pri)
ENDIF
n:=n.succ
ENDWHILE
p_CleanList(l,FALSE,0,LIST_REMOVE)
IF cxbase THEN CloseLibrary(cxbase)
ELSE
WriteF('Commodities.library ??\n')
ENDIF
ENDPROC
/**/
/**/
/**/
/*"APPLICATION PROCEDURES"*/
/*"updateprompt(rc)"*/
PROC updateprompt(rc)
StringF(prompt,'\e[32m\d.\e[31m\s[\e[33m\d\e[31m]>',pro.tasknum,cdn,rc)
ENDPROC
/**/
/*"makefilelist(a,dirsf,filesf,recf)"*/
PROC makefilelist(a,dirsf,filesf,recf) HANDLE
DEF er
DEF i:PTR TO fileinfoblock,size=0
DEF anchor=NIL:PTR TO anchorpath,fullpath
DEF ascii[256]:STRING,x,work[256]:STRING,curdir[256]:STRING
DEF fn:PTR TO filenode,l
dWriteF(['makefilelist(\s,','\d,','\d,','\d)\n'],[a,dirsf,filesf,recf])
anchor:=New(SIZEOF anchorpath+MAXPATH)
anchor.breakbits:=4096
anchor.strlen:=MAXPATH-1
er:=MatchFirst(a,anchor) /* collect all strings */
WHILE er=0
fullpath:=anchor+SIZEOF anchorpath
i:=anchor.info
StringF(work,'\s',i.filename)
IF IF i.direntrytype>0 THEN dirsf ELSE filesf
fn:=New(SIZEOF filenode)
fn.direntrytype:=i.direntrytype
IF l:=Lock(fullpath,-2)
NameFromLock(l,curdir,256)
StrCopy(ascii,curdir,ALL)
MidStr(curdir,fullpath,0,StrLen(fullpath)-StrLen(i.filename))
fn.curdirname:=String(StrLen(curdir))
StrCopy(fn.curdirname,curdir,ALL)
IF l THEN UnLock(l)
ENDIF
fn.protection:=i.protection
IF i.direntrytype>0 THEN fn.size:=0 ELSE fn.size:=i.size
fn.numblocks:=i.numblocks
fn.comment:=String(StrLen(i.comment))
StrCopy(fn.comment,i.comment,ALL)
p_AjouteNode(filelist,work,fn)
ENDIF
IF i.direntrytype<0 THEN size:=size+i.size
IF recf AND (i.direntrytype>0) /* do recursion(=tail) */
x:=StrLen(fullpath)
IF x+5<MAXPATH THEN CopyMem('/#?',fullpath+x,4)
size:=size+makefilelist(fullpath,dirsf,filesf,recf)
fullpath[x]:=0
ENDIF
er:=MatchNext(anchor)
ENDWHILE
IF er<>ERROR_NO_MORE_ENTRIES THEN Raise(er)
MatchEnd(anchor)
Dispose(anchor)
anchor:=NIL
EXCEPT /* nested exception handlers! */
IF anchor THEN MatchEnd(anchor)
Raise(exception) /* this way, we call _all_ handlers in the recursion */
ENDPROC size /* and thus calling MatchEnd() on all hanging anchors */
/**/
/*"p_InitData()"*/
PROC p_InitData()
DEF str[256]:STRING
DEF cstr[256]:STRING
pro:=FindTask(NIL)
cl:=Shl(pro.cli,2)
GetCurrentDirName(str,256)
StringF(cstr,'CD \s',str)
StringF(bdn,'CD \s',str)
cd(cstr)
freenode:=[18,DISL,34,DISL,DISE]
filelist:=p_InitList()
p_InitCommandList()
ENDPROC TRUE
/**/
/*"p_RemData()"*/
PROC p_RemData()
p_CleanList(filelist,TRUE,freenode,LIST_REMOVE)
ENDPROC
/**/
/*"getArg(argu,temp,a:PTR TO LONG)"*/
PROC getArg(argu,temp,a)
DEF myc:PTR TO csource
DEF ma=NIL:PTR TO rdargs
DEF rdargs=NIL
DEF argstr[256]:STRING
DEF ret=NIL
StrCopy(argstr,argu,ALL)
/*
WriteF('\s\n',argstr)
IF StrCmp('?',TrimStr(argstr),1) THEN RETURN NIL
/*IF argu[0]="?" THEN RETURN NIL*/
*/
StrAdd(argstr,'\n',1)
IF ma:=AllocDosObject(DOS_RDARGS,NIL)
myc:=New(SIZEOF csource)
myc.buffer:=argstr
myc.length:=EstrLen(argstr)
ma.flags:=1
CopyMem(myc,ma.source,SIZEOF csource)
IF rdargs:=ReadArgs(temp,a,ma)
/*
StrCopy(argstr,a[0],ALL)
WriteF('\s\n',argstr)
*/
ret:=a
IF rdargs THEN FreeArgs(rdargs)
ENDIF
IF myc THEN Dispose(myc)
IF ma THEN FreeDosObject(DOS_RDARGS,ma)
ELSE
WriteF('AllocDosObject failed !!\n')
ENDIF
ENDPROC ret
/**/
/*"main()"*/
PROC main()
DEF inputstring[80]:STRING
DEF comparestring[80]:STRING
DEF ret
DEF m:PTR TO LONG
DEF rdargs=NIL
m:=[0]
IF rdargs:=ReadArgs('Interatif/F',m,NIL)
IF con:=Open('CONSOLE:',NEWFILE)
IF p_InitData()
p_DoReadHeader({banner})
IF m[0]
StrCopy(inputstring,m[0],ALL)
StrCopy(comparestring,inputstring,ALL)
UpperStr(comparestring)
lookinternalcommand(comparestring,inputstring)
JUMP mainend
ENDIF
qhelp()
WHILE StrCmp(comparestring,'BYE',ALL)=FALSE
IF lookinternalcommand(comparestring,inputstring)=FALSE
ret:=execute(inputstring,'',4000,0,FALSE)
updateprompt(ret)
ENDIF
Write(con,prompt,EstrLen(prompt))
ReadStr(con,inputstring)
StrCopy(comparestring,inputstring,ALL)
UpperStr(comparestring)
ENDWHILE
mainend:
p_RemData()
ENDIF
cd(bdn)
Close(con)
ENDIF
IF rdargs THEN FreeArgs(rdargs)
ELSE
WriteF('Bad Arg!!\n')
ENDIF
ENDPROC
/**/
/**/